class Solution {
public:
    int nthSuperUglyNumber(int n, vector<int>& primes) {
        priority_queue<int, vector<int>, greater<int>> p;  
        unordered_set<int> st;
        p.push(1);
        st.insert(1);
        for(int i = 2; i < n; i++){
            int temp = p.top();
            p.pop();
            for(int j = 0; j < primes.size(); j++){
                if(st.find(temp * primes[i]) == st.end()){
                    p.push(temp * primes[i]);
                    st.insert(temp * primes[i]);
                }
            }
        }
        return p.top();
    }
};
/**
 * 2021.8.9
 * 最小堆做法，时间复杂度 O(nmlog(nm))，空间复杂度 O(nm)。
*/